package cn.cosmosx.base.validate;

import javax.validation.GroupSequence;

/**
 * 基于 @{@linkplain org.springframework.validation.annotation.Validated}的分组器
 * <p>
 * 配合spring的@Validated功能分组使用)
 * <p>
 * 示例：在controller的请求参数上增加
 * <blockquote><pre>
 *     @PostMapping("/getUser")
 *     public UserVo(@Validated({ValidatedGroup.Query.class}) UserParam param) {
 *         return new UserVo();
 *     }
 *     class UserParam {
 *         // 只有在分组为Query的情况下才会走该校验逻辑
 *         @NotBlank(message = "用户名不能为空", groups = {ValidatedGroup.Query.class})
 *         private String username;
 *     }
 * </pre></blockquote>
 */
public interface ValidatedGroup {
    /**
     * 新增
     */
    interface Insert {
    }

    /**
     * 更新
     */
    interface Update {
    }

    /**
     * 删除
     */
    interface Delete {
    }

    /**
     * 查询
     */
    interface Query {
    }

    /**
     * 增删改查
     */
    @GroupSequence({Insert.class, Update.class, Delete.class, Query.class})
    interface All {
    }

    /**
     * 登陆类型
     */
    interface LoginType {
        /**
         * 密码登录
         */
        interface Password {
        }

        /**
         * 手机验证码登录
         */
        interface MobileCode {
        }

        /**
         * 小程序授权码登录
         */
        interface MiniAuth {
        }

        /**
         * 第三方授权登录
         */
        interface ThirdAuth {
        }
    }
}
